#ifndef DTU_CONFIG_H
#define DTU_CONFIG_H

#include "dtu_common.h"



/* DTU完整配置结构 */
typedef struct {
    /* 设备基本信息 */
    device_info_t device_info;
    
    /* 串口配置 */
    serial_config_t rs485_config;
    serial_config_t rs232_config;
    
    /* 网络配置 */
    network_config_t ethernet_config;
    wifi_config_t wifi_config;
    lte_config_t lte_config;
    
    /* MQTT配置 */
    mqtt_config_t mqtt_config;
    mqtt_subscribe_config_t mqtt_subscribe_config;

    /* 数据采集配置 */
    collect_config_t collect_config;

    /* Modbus设备配置 - 简化为AT指令字符串格式 */
    struct {
        int device_count;                    /* 设备数量 */
        int max_devices;                     /* 最大设备数量限制 */
        char pollstr_commands[16][512];      /* AT+POLLSTR指令字符串数组 */

        /* 为了兼容性，保留旧的结构体但标记为废弃 */
        struct {
            int id;                          /* 设备ID */
            char name[64];                   /* 设备名称 */
            bool enabled;                    /* 是否启用 */
            bool crc_enable;                 /* CRC校验使能 */
            char poll_string[256];           /* 轮询字符串(16进制) */
            char serial_port[16];            /* 串口名称(rs485/rs232) */
            char description[128];           /* 设备描述 */
        } devices[16];                       /* 最多16个设备 - 废弃，仅为兼容性保留 */
    } modbus_config;

    /* 数据推送配置 */
    struct {
        push_protocol_t protocol; /* 推送协议 */
        data_format_t format;     /* 数据格式 */
        char server_host[128];    /* 服务器地址 */
        int server_port;          /* 服务器端口 */
        char username[64];        /* 用户名 */
        char password[128];       /* 密码 - 增大以支持长密码 */
        char topic[128];          /* MQTT主题或HTTP路径 */
        char client_id[128];      /* 客户端ID - 增大以支持长ID */
        int timeout;              /* 超时时间(秒) */
        int retry_count;          /* 重试次数 */
        int retry_interval;       /* 重试间隔(秒) */
        bool enable_ssl;          /* 启用SSL/TLS */
        bool enable_compression;  /* 启用压缩 */
        int keepalive;            /* 保活时间(秒) */
        bool clean_session;       /* 清除会话 */
    } push_config;
    
    /* Web服务配置 */
    struct {
        int port;
        char username[32];
        char password[64];
        bool enable_auth;
        int session_timeout;
    } web_config;
    
    /* 系统配置 */
    struct {
        log_level_t log_level;
        int log_output_mask;
        char log_file[256];
        bool enable_watchdog;
        int watchdog_timeout;
        bool enable_auto_restart;
    } system_config;

    /* Modbus测试配置 */
    struct {
        int device_address;       /* 设备地址 */
        int function_code;        /* 功能码 */
        int start_address;        /* 起始地址 */
        int register_count;       /* 寄存器数量 */
        char serial_port[16];     /* 串口类型 */
    } modbus_test_config;

} dtu_config_t;

/* 配置管理器结构 */
typedef struct {
    dtu_config_t config;       /* 当前配置 */
    char config_file[256];     /* 配置文件路径 */
    pthread_mutex_t mutex;     /* 互斥锁 */
    bool initialized;          /* 初始化标志 */
} config_manager_t;

/* 函数声明 */

/**
 * @brief 初始化配置管理器
 * @param config_file 配置文件路径，NULL使用默认路径
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_init(const char* config_file);

/**
 * @brief 销毁配置管理器
 */
void dtu_config_cleanup(void);

/**
 * @brief 加载配置文件
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_load(void);

/**
 * @brief 保存配置到文件
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_save(void);

/**
 * @brief 重新加载配置文件
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_reload(void);

/**
 * @brief 恢复默认配置
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_reset_to_default(void);

/**
 * @brief 获取完整配置
 * @return 配置结构指针
 */
const dtu_config_t* dtu_config_get(void);

/**
 * @brief 设置完整配置
 * @param config 配置结构指针
 * @return DTU_OK 成功，其他值失败
 */
dtu_error_t dtu_config_set(const dtu_config_t* config);



#endif /* DTU_CONFIG_H */
